﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Epic.Expressions.ECMAScript
{
    public static class DateTimeUtility
    {
        internal static readonly DateTime smECMAScriptDateZero = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);

        public static DateTime ToDateTime(this double value)
        {
            return DateTimeUtility.smECMAScriptDateZero + TimeSpan.FromMilliseconds(value);
        }

        public static DateTime? ToDateTime(this double? value)
        {
            if (value.HasValue)
                return DateTimeUtility.smECMAScriptDateZero + TimeSpan.FromMilliseconds(value.Value);
            return null;
        }

        public static double ToTicks(this DateTime value)
        {
            // ECMAScript 中的时间刻度实际上是自世界协调时1970年1月1日0时整开始计算的毫秒数。
            // 进行转换的时候只要得出两个时间的差值并转换成毫秒数就可以了。

            if (DateTimeKind.Local == value.Kind)
                value = value.ToUniversalTime();

            return (value - smECMAScriptDateZero).TotalMilliseconds;
        }

        public static double? ToTicks(this DateTime? value)
        {
            if (value.HasValue)
                return value.Value.ToTicks();
            return null;
        }

    }
}
